package com.hqq.proxy;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;
import java.util.List;

/**
 * ProxyManager
 * 代理管理器
 * 提供一个创建代理对象的方法 输入一个目标类和一组Proxy实现 输出一个代理对象
 * Created by heqianqian on 2017/7/21.
 */
public class ProxyManager {


    /**
     * 创建代理对象
     */
    @SuppressWarnings("unchecked")
    public static <T> T createProxy(final Class<?> targetClass, final List<Proxy> proxyList) {
        return (T) Enhancer.create(targetClass, (MethodInterceptor) (obj, method, args, proxy) -> new ProxyChain(targetClass, obj, method, proxy, args, proxyList));
    }
}
